#include "proc_1553B_CMD.h"
void proc_1553B_CMD(B1553_BusService *pBusServ, Eth_Service *pEthServ)
{
    u32 foo = 0;
    u8 busData[B1553_BCST_POSALT_DATALEN] = {0}; // 最长776字节姿态轨道数据
    u32 busDataLen = 0;
    struct BusCmdData busCMD = {0}; // 存放数据注入和总线指令数据

    do
    {
        foo = B1553_CMDHandle(pBusServ, busData, &busDataLen);
        // 根据foo数值处理
        switch (foo)
        {
        case CMDHANDLE_ALTPOS: // 姿态轨道数据 将busData中数据发给以太网
            eth_store_AltPos_data(busData, busDataLen);
            break;

        case CMDHANDLE_TIME: // 时间数据处理 利用1553B时间特性进行每秒定时动作
            eth_store_bcst_time(pEthServ, (u16 *)busData, busDataLen);
            idleTestMode_getTM(); // 空闲和自校模式发起与主体通讯 获取内部遥测
            break;

        case CMDHANDLE_DATAINJ:                                  // 数据注入数据处理
            // memcpy(&busCMD, busData, sizeof(struct BusCmdData)); // 安全拷贝数据 不用指针转换
            t_memcpy(&busCMD, busData, sizeof(struct BusCmdData)); // 安全拷贝数据 不用指针转换
            if (busCMD.funcID == DATAINJ_SAMPLE_PERIOD)          // 采样周期数据处理
            {
                timer_kl202_setRstValue((u32)(busCMD.data[0]));
                continue;
                // break;
            }
            if (busCMD.funcID == DATAINJ_IP_CFG) // IP和MAC地址修改
            {
                eth_modify_MAC_IP_Port(pEthServ, &(busCMD.data[8]), &(busCMD.data[0]), busCMD.data[11]);
                continue;
            }
            if (busCMD.funcID == DATAINJ_CLOUD_THREHOLD)
            {
                eth_modify_cloud_threshold(busCMD.data[0]);
                continue;
            }
            if (busCMD.funcID == DATAINJ_CALIBRATION_PARA)
            {
                continue;
            }
            if (busCMD.funcID == DATAINJ_FLASH_ERASE) // FLASH擦除指令
            {
                uart_rs01_send((u8 *)(busCMD.data), 32);
                dbg_print((u8 *)(busCMD.data), 32); // 显示接收到的数据
                uart_rs01_rcvTM();
                continue;
            }
            break;

        case CMDHANDLE_BUSCMD:                                   // 收到总线命令 切换模式时的操作
            t_memcpy(&busCMD, busData, sizeof(struct BusCmdData)); // 安全拷贝数据 不用指针转换
            if (busCMD.paraID1 == SYS_MODE_IDLE)                 // 待机模式
            {
                timer_kl202_stop();
                continue;
            }
            if (busCMD.paraID1 == SYS_MODE_WORK)
            {
                u32 current_subtime[2] = {0}; // 当前秒内计时时间
                // 记录当前秒内计时 发送串口数据
                timer_capture_gettime(current_subtime, 2);
                eth_store_subSecond_time(pEthServ, current_subtime, 2);
                timer_kl202_start();                       // 启动定时器
                uart_start_acquire();                      // 启动串口发送
                B1553_TMadd_Comm_RS422_TX_Count(pBusServ); // 发送计数+1
                continue;
            }
            break;

        default:
            break;
        }

    } while (foo > 0);

    return;
}